The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely complicated devices. Although today's computers are more sophisticated than EDVAC, the most basic requirements levied upon computer systems have not changed. Now, as in the past, a computer system's job is to access, manipulate, and store information. This fact is true regardless of the type or vintage of computer system.
Some of the most fundamental techniques that computer systems use to access, store and manipulate information are reading and writing information in a data source, such as a database. Today, most databases are stored on powerful computers called “servers.” Other computers, called “clients,” access the database by sending search requests to the server over a computer network. The server computer receives the request, performs the requested operation, and then returns the results to the client.
Although the client/server model has many advantages, one drawback is that before a client can access the database, it must first connect to that database's server. Unfortunately, managing these connections requires a significant amount of overhead. That is, the server must use a certain amount of its computing resources to create the connections, to maintain the connections, and then release connections when they are no longer required. Those skilled in the art will appreciate that the total database overhead can be particularly significant for World Wide Web (“Web”) based applications because each client application will usually use one or more isolated connections to request the desired operations and because most Web clients connect and disconnect frequently. As a result, more effort is often spent connecting and disconnecting the clients than is spent processing their requests. The creation overhead can be particularly significant because it decreases the perceived speed of the Web based application.
One partial solution to this problem is to use a technique called connection pooling. In this technique, special programs called application servers create a large number of connections, in advance, so that future client requests do not need to incur the creation overhead. When the request is satisfied and the response is returned to the user, the application server returns the resource to the connection pool for reuse. In essence, this technique spreads the connection overhead across several user requests so that each user request incurs a fraction of the total creation and disconnection cost.
Although connection pooling reduces the overhead required to create and destroy connections, one problem is that the pool itself requires some overhead to maintain. Thus, if the load decreases over time, maintaining a large number of connections in connection pool uses unnecessary resources. The conventional solution is to allow idle connections to “time-out.” Unfortunately, this technique does not work well for applications that do not have a static load, because, when the load again increases, the number of connections currently in the pool will not be sufficient. Connections then have to be created as required, and client applications incur this creation cost.
U.S. patent application Ser. No. 10/767,043, filed Jan. 29, 2004 and entitled “Method and Apparatus for Managing a Connection Pool using Heuristic Information,” introduced an extension to the connection pooling architecture that used heuristic data to ensure that the connection pool contains the required number of connections for a given time period. This extension improved the performance for applications that use connection pooling architectures, such as Java Database Connectivity (“JDBC”) and Java 2 Connector (“J2C”) connections, by attempting to predict when increased connections will be necessary. This extension also allowed the pool to populate itself with new connections during periods of lower workload instead of consuming system resources after the workload has begun to increase. One limitation of this extension, however, is that it still required manual intervention by a system administrator to collect the heuristic data and to configure the heuristic override section in the heuristic configuration file. These tasks can take considerable time and require considerable expertise.
Without a way for computer systems to configure their own connection managers, the promise of network computing may never be fully achieved.